package com.wheel.core.utils;
/*
 * <h3>Title:wheel-parent系统</h3>
 * <p>Copyright (c) 2019, wangnaifei@163.com. All rights reserved.</p>
 * @author wangnaifei@163.com
 */

import org.slf4j.Logger;
import org.slf4j.helpers.MessageFormatter;

/**
 * <dt>Description:Log</dt>
 * <dd>日志工具</dd>
 *
 * @author wangnaifei@163.com
 * @version 1.0 <i>2019/12/12 19:41</i>
 * @since jdk1.7+
 */
public class Log {

    /**
     * RequestId
     */
    public static final String RequestId = "RequestId";

    /**
     * <dt>Description:formatMessage</dt>
     * <dd>基础消息格式化</dd>
     * <dd>author: wangnaifei@163.com</dd>
     * <dd>version:1.0 <i>2019/12/11 14:45</i></dd>
     * <dd>version:1.1 <i>2019/12/11 14:45</i>perfix传空，传null会打印出来 </dd>
     *
     * @param message 消息
     * @param args    参数
     * @return java.lang.String
     * @since jdk1.7+
     */
    public static String formatMessage(String message, Object... args) {
        return MessageFormatter.arrayFormat(message, args).getMessage();
    }

    /**
     * <dt>Description:logMessage</dt>
     * <dd>基础消息格式化</dd>
     * <dd>author: wangnaifei@163.com</dd>
     * <dd>version:1.0 <i>2019/12/11 14:45</i></dd>
     *
     * @param perfix  前缀
     * @param message 消息
     * @return java.lang.String
     * @since jdk1.7+
     */
    private static String logMessage(String perfix, String message) {
        return "==> " + perfix + message;
    }

    /**
     * <dt>Description:logMessage</dt>
     * <dd>基础消息格式化</dd>
     * <dd>author: wangnaifei@163.com</dd>
     * <dd>version:1.0 <i>2019/12/11 14:45</i></dd>
     *
     * @param message 消息
     * @return java.lang.String
     * @since jdk1.7+
     */
    private static String logMessage(String message) {
        return logMessage("", message);
    }

    /**
     * <dt>Description:trace</dt>
     * <dd>消息输出</dd>
     * <dd>author: wangnaifei@163.com</dd>
     * <dd>version:1.0 <i>2019/12/11 14:44</i></dd>
     *
     * @param log     log实例
     * @param message 消息
     * @param args    参数
     * @since jdk1.7+
     */
    public static void trace(Logger log, String message, Object... args) {
        log.trace(logMessage(message), args);
    }

    /**
     * <dt>Description:debug</dt>
     * <dd>消息输出</dd>
     * <dd>author: wangnaifei@163.com</dd>
     * <dd>version:1.0 <i>2019/12/11 14:44</i></dd>
     *
     * @param log     log实例
     * @param message 消息
     * @param args    参数
     * @since jdk1.7+
     */
    public static void debug(Logger log, String message, Object... args) {
        log.debug(logMessage(message), args);
    }

    /**
     * <dt>Description:info</dt>
     * <dd>消息输出</dd>
     * <dd>author: wangnaifei@163.com</dd>
     * <dd>version:1.0 <i>2019/12/11 14:44</i></dd>
     *
     * @param log     log实例
     * @param message 消息
     * @param args    参数
     * @since jdk1.7+
     */
    public static void info(Logger log, String message, Object... args) {
        log.info(logMessage(message), args);
    }

    /**
     * <dt>Description:warn</dt>
     * <dd>消息输出</dd>
     * <dd>author: wangnaifei@163.com</dd>
     * <dd>version:1.0 <i>2019/12/11 14:28</i></dd>
     *
     * @param log     log实例
     * @param message 消息
     * @param args    参数
     * @since jdk1.7+
     */
    public static void warn(Logger log, String message, Object... args) {
        log.warn(logMessage(message), args);
    }

    /**
     * <dt>Description:error</dt>
     * <dd>消息输出</dd>
     * <dd>author: wangnaifei@163.com</dd>
     * <dd>version:1.0 <i>2019/12/11 14:26</i></dd>
     *
     * @param log     log实例
     * @param message 消息
     * @param args    参数
     * @since jdk1.7+
     */
    public static void error(Logger log, String message, Object... args) {
        log.error(logMessage(message), args);
    }

    /**
     * <dt>Description:error</dt>
     * <dd>消息输出</dd>
     * <dd>author: wangnaifei@163.com</dd>
     * <dd>version:1.0 <i>2019/12/11 14:26</i></dd>
     *
     * @param log     log实例
     * @param message 消息
     * @param t       异常对象
     * @since jdk1.7+
     */
    public static void error(Logger log, String message, Throwable t) {
        log.error(logMessage(message), t);
    }
    // ========================================================================================================

    /**
     * <dt>Description:registered</dt>
     * <dd>消息输出</dd>
     * <dd>author: wangnaifei@163.com</dd>
     * <dd>version:1.0 <i>2019/12/11 14:26</i></dd>
     *
     * @param log     log实例
     * @param message 消息
     * @param args    参数
     * @since jdk1.7+
     */
    public static void registered(Logger log, String message, Object... args) {
        log.info(logMessage("register:", message), args);
    }

    /**
     * <dt>Description:registered</dt>
     * <dd>消息输出</dd>
     * <dd>author: wangnaifei@163.com</dd>
     * <dd>version:1.0 <i>2019/12/11 14:26</i></dd>
     *
     * @param log log实例
     * @since jdk1.7+
     */
    public static void registered(Logger log) {
        registered(log, "");
    }

    /**
     * <dt>Description:configured</dt>
     * <dd>消息输出</dd>
     * <dd>author: wangnaifei@163.com</dd>
     * <dd>version:1.0 <i>2019/12/11 14:25</i></dd>
     *
     * @param log     log实例
     * @param message 消息
     * @param args    参数
     * @since jdk1.7+
     */
    public static void configured(Logger log, String message, Object... args) {
        log.info(logMessage("configured:", message), args);
    }

    /**
     * <dt>Description:configured</dt>
     * <dd>消息输出</dd>
     * <dd>author: wangnaifei@163.com</dd>
     * <dd>version:1.0 <i>2019/12/11 14:25</i></dd>
     *
     * @param log log实例
     * @since jdk1.7+
     */
    public static void configured(Logger log) {
        configured(log, "");
    }

}
